#pragma once
#include "Component.h"
#include "../../Math/GeometryGenerator.h"
#include "../../Render/Buffer/VertexBuffer.h"
#include "../../Render/Buffer/IndexBuffer.h"

struct SceneModelDesc
{
	std::vector<Vertex> mVertexs;

	std::vector<uint32> mIndices;

	glm::vec3 mAmbient;

	glm::vec3 mDiffuse;

	glm::vec3 mSpecular;

	glm::vec3 mTransmittance;

	glm::vec3 mEmission;

	float mShininess;

	float mIor;

	float mDissolve;

	int32 mIllum;

	int32 mDummy;

	float mRoughness;

	float mMetallic;

	float mSheen;

	float mClearcoatThickness;

	float mClearcoatRoughness;

	float mAnisotropy;

	float mAnisotropyRotation;

	std::string mAmbientPath;             // map_Ka
	std::string mDiffusePath;             // map_Kd
	std::string mSpecularPath;            // map_Ks
	std::string mSpecularHighlightPath;  // map_Ns
	std::string mBumpPath;                // map_bump, map_Bump, bump
	std::string mDisplacementPath;        // disp
	std::string mAlphaPath;               // map_d
	std::string mReflectionPath;          // refl

	std::string mRoughnessPath;  // map_Pr
	std::string mMetallicPath;   // map_Pm
	std::string mSheenPath;      // map_Ps
	std::string mEmissivePath;   // map_Ke
	std::string mNormalPath;     // norm. For normal mapping.
};

class SceneModel : public Component
{
public:

	SceneModel() = default;
	SceneModel(const std::string objPath, const std::string mtlDir = std::string());

public:

	std::vector<SceneModelDesc> mDescs;
};